/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import beans.Categorias;
import beans.CategoriasFacadeLocal;
import beans.Idiomapeliculas;
import beans.IdiomapeliculasFacadeLocal;
import beans.Idiomas;
import beans.IdiomasFacadeLocal;
import beans.Peliculas;
import beans.PeliculasFacadeLocal;
import beans.Personapeliculas;
import beans.PersonapeliculasFacadeLocal;
import beans.Personas;
import beans.PersonasFacadeLocal;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author machine
 */
@WebServlet(name = "peliculas", urlPatterns = {"/peliculas"})
public class peliculas extends HttpServlet {

    public HttpSession sesion = null;
    
    @EJB
    PeliculasFacadeLocal miSessionPeliculas;
    @EJB
    CategoriasFacadeLocal miSessionCategorias;
    @EJB
    IdiomasFacadeLocal miSessionIdiomas;
    @EJB
    IdiomapeliculasFacadeLocal miSessionIdiomaPeliculas;
    @EJB
    PersonasFacadeLocal miSessionPersonas;
    @EJB
    PersonapeliculasFacadeLocal miSessionPersonapeliculas;

    String mensaje = "";
    String selectCategorias = "";

    
    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            
            
            sesion = request.getSession();
            if( sesion.getAttribute("usuario") != null || sesion.getAttribute("perfil") != null ){
                String perfilu = sesion.getAttribute("perfil").toString();
                if( !perfilu.equals("2") ){
                    response.sendRedirect("index.jsp");
                    //request.getRequestDispatcher("index.jsp").forward(request, response); 
                }
            }
            else{
                response.sendRedirect("index.jsp");
            }

            request.setAttribute("mensaje", mensaje);

            cargarDatos();
            
            String htmlLogin = retornarDatosLoguin();
            
            request.setAttribute("loginAcceso", htmlLogin);
            
            String opcion = request.getParameter("opcion");
            
            request.setAttribute("opcion", opcion);
            
            switch ( Integer.parseInt(opcion) ) {
                
                
                default:  // Administrar Peliculas
                        request.setAttribute("scategorias", selectCategorias);
                        String misPeliculas = consultarPeliculas();
                        request.setAttribute("peliculas", misPeliculas);
                        request.getRequestDispatcher("peliculas.jsp?opcion=0").forward(request, response);    
                        break;
                
            }
            
            
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        
        String name=null;
        if( request.getParameter("administrarpeliculas") != null ){
            name = formularioAdminPelicula(request.getParameter("administrarpeliculas"));
            response.setContentType( "text/html; charset=iso-8859-1" );
            PrintWriter out = response.getWriter();
            out.println(name); 
        }
        else if( request.getParameter("administrarpersonas") != null ){
            name = formularioAdminPersonas(request.getParameter("administrarpersonas"));
            response.setContentType( "text/html; charset=iso-8859-1" );
            PrintWriter out = response.getWriter();
            out.println(name); 
        }
        else if( request.getParameter("actualiazrselectcateg") != null ){
            name = retornarSelectCategorias(request.getParameter("actualiazrselectcateg"), request.getParameter("defecto"));
            response.setContentType( "text/html; charset=iso-8859-1" );
            PrintWriter out = response.getWriter();
            out.println(name); 
        }else if( request.getParameter("eliminarpelicula") != null ){
            Boolean borro = eliminarPelicula(request.getParameter("eliminarpelicula"));
            response.setContentType( "text/html; charset=iso-8859-1" );
            PrintWriter out = response.getWriter();
            if( borro ){
                 out.println("OK"); 
            }
        else{
                out.println("ERROR"); 
            }
        } if( request.getParameter("editarvideo") != null  ){
            
            String variables = "";
            Peliculas video = miSessionPeliculas.consultarPelicula(request.getParameter("editarvideo"));
            
            String tipoVideo = "";
            
            if( video.getIdcategorias().getIdcategorias() < 1000 ){
                tipoVideo = "1";
            }
            else{
                tipoVideo = "2";
            }
            
            String objectToReturn = "{ \"id\": \""+video.getIdpeliculas()+"\", \"ident\": \""+video.getIdentificador()+"\", \"titulo\": \""+video.getTitulo()+"\", "
                                        + "\"cate\": \""+video.getIdcategorias().getIdcategorias()+"\", \"dura\": \""+video.getDuracion()+"\", \"ano\": \""+video.getAno()+"\","
                                        + "\"trailer\": \""+video.getUrlTrailer()+"\",\"snap\": \""+video.getUrlSnapshot()+"\",\"sino\": \""+video.getSinopsis()+"\",\"tipovideo\": \""+tipoVideo+"\""
                                        + " }";
            
            response.setContentType("application/json");
            PrintWriter out = response.getWriter();
            out.println(objectToReturn);
            
        }else{
            processRequest(request, response);
        }
        
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        
        
        String nuevovideo = request.getParameter("nuevovideo");
        String adicionaridioma = request.getParameter("adicionaridioma");
        String adicionarpersona = request.getParameter("adicionarpersona");
        
        
        if( nuevovideo != null ){
           
            if( nuevovideo.equals("1") ){
            
                String iden = request.getParameter("identificacion");
                String tit = request.getParameter("titulo");
                String cate = request.getParameter("categoria");
                String dura = request.getParameter("duracion");
                String ano = request.getParameter("ano");
                String trail = request.getParameter("trailer");
                String snap = request.getParameter("snapshot");
                String sinop = request.getParameter("sinopsis");

                Categorias cat = miSessionCategorias.consultarCategoria(cate);
                
                String idvideo = request.getParameter("idvideo");
                if( idvideo != null && !idvideo.isEmpty() ){
                    Peliculas editar = miSessionPeliculas.consultarPelicula(idvideo);
                    
                    editar.setIdentificador(iden);
                    editar.setTitulo(tit);
                    editar.setDuracion( Float.valueOf(dura) );
                    editar.setIdcategorias( cat );
                    editar.setAno(ano);
                    editar.setUrlTrailer(trail);
                    editar.setUrlSnapshot(snap);
                    editar.setSinopsis(sinop);

                    miSessionPeliculas.edit(editar);
                    
                }
                else{
                    
                    Peliculas p = new Peliculas();

                    p.setIdentificador(iden);
                    p.setTitulo(tit);
                    p.setDuracion( Float.valueOf(dura) );
                    p.setIdcategorias( cat );
                    p.setAno(ano);
                    p.setUrlTrailer(trail);
                    p.setUrlSnapshot(snap);
                    p.setSinopsis(sinop);

                    miSessionPeliculas.create(p);
                    
                }
            }
        }
            
            //request.setAttribute("mensaje", "ddd");

        // Adicionar idioma a video
        if( adicionaridioma != null ){
            if( adicionaridioma.equals("1") ){
                
                String peli = request.getParameter("idvideo");
                String idioma = request.getParameter("idiomas");
                
                Idiomapeliculas ip = new Idiomapeliculas();
                Peliculas p = miSessionPeliculas.consultarPelicula(peli);
                Idiomas i = miSessionIdiomas.consultarIdioma(idioma);
                
                Boolean existe = false;
                
                List<Idiomapeliculas> idipeli = miSessionIdiomaPeliculas.buscarIdiomasVideo(peli, idioma);
                for( Idiomapeliculas Ip:idipeli ){
                    existe = true;
                }
                if( existe ){
                    mensaje =  "El idioma que intenta asociar al video, ya se encuentra relacionado..";
                }
                else{
                    ip.setIdpeliculas(p);
                    ip.setIdidiomas(i);
                    miSessionIdiomaPeliculas.create(ip);
                    mensaje = "Idioma relacionado existosamente.";
                }
                
                
            }
        }
        
        // Adicionar persona a video
        if( adicionarpersona != null ){
            if( adicionarpersona.equals("1") ){
                
                String peli = request.getParameter("idvideo");
                String persona = request.getParameter("personas");
                
                Personapeliculas pp = new Personapeliculas();
                Peliculas p = miSessionPeliculas.consultarPelicula(peli);
                Personas i = miSessionPersonas.consultarPersona(persona);
                
                Boolean existe = false;
                
                List<Personapeliculas> perpeli = miSessionPersonapeliculas.buscarPersonasVideo(peli, persona);
                for( Personapeliculas pep:perpeli ){
                    existe = true;
                }
                if( existe ){
                    mensaje =  "La persona que intenta asociar al video, ya se encuentra relacionada.";
                }
                else{
                    pp.setIdpeliculas(p);
                    pp.setIdpersonas(i);
                    miSessionPersonapeliculas.create(pp);
                    mensaje = "persona relacionada existosamente.";
                }
                
                
            }
        }
        
        
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    
    
    
    
    
    private void cargarDatos( ) {
        
        selectCategorias = "";
        List<Categorias> misCategorias = miSessionCategorias.findAll();
        selectCategorias += "<select name='categoria' id='categoria'>";
        for( Categorias c:misCategorias ){
            if( c.getIdcategorias() < 1000 )
            selectCategorias += "<option value='"+c.getIdcategorias()+"'>"+c.getNombre()+"</option>"; 
        }
        selectCategorias += "</select>";
                
        
    }
    
   private String retornarDatosLoguin(){
    
        String htmlLogin = "";

        
        // Si no se hainiciado Sesion
        if( sesion.getAttribute("usuario") == null ){
            htmlLogin = "<h3>Acceso de Usuario</h3>"
                    + "<br>"
                    + "  <ul class=\"list\">"
                    + "<li><a id=\"abrir\" href=\"javascript:initSession();\">Iniciar Session</a></li>"
                    + "<li><a id=\"abrir\" href=\"javascript:registerUser();\">Registrarse</a></li>"
                    +"</ul>  <br>";
        }
        else{
            htmlLogin = "<h3>Bienvenido "+ sesion.getAttribute("nusuario") +"</h3>"
                    + "<br>"
                    + "  <ul class=\"list\">"
                    + "<li><a id=\"abrir\" href=\"opciones?logout=1\">Cerrar Session</a></li>";
            
            if( sesion.getAttribute("perfil") != null ){ 
                String perfilu = sesion.getAttribute("perfil").toString();
                if( perfilu.equals("2") ){
                    htmlLogin += "<li><a id=\"abrir\" href=\"peliculas.jsp\">Administrar Peliculas</a></li>";
                    htmlLogin += "<li><a id=\"abrir\" href=\"series.jsp\">Administrar Series</a></li>";
                    htmlLogin += "<li><a id=\"abrir\" href=\"colecciones.jsp\">Administrar Colecciones</a></li>";
                }
            }
            
            htmlLogin += "</ul>  <br>";
        
        }
       return htmlLogin;
    }
    
   
   private String consultarPeliculas(){
       
       String htmlPeliculas = "";
       
       List<Peliculas> misPelis = miSessionPeliculas.findAll();
       
       if( misPelis != null ){
           
        htmlPeliculas += " <table width='70%'  > ";   
        htmlPeliculas += " <tr> ";   
        htmlPeliculas += " <th   class=\"sort\" data-sort=\"codigo\">Código</th> ";   
        htmlPeliculas += " <th  class=\"sort\" data-sort=\"titulo\">Titulo</th> ";   
        htmlPeliculas += " <th  class=\"sort\" data-sort=\"categoria\">Categoria</th> ";   
        htmlPeliculas += " <th  class=\"sort\" data-sort=\"idomas\">Idiomas</th> ";   
        htmlPeliculas += " <th  class=\"sort\" data-sort=\"personas\">Personas</th> ";   
        htmlPeliculas += " <th  class=\"sort\" data-sort=\"name\">Editar</th> ";   
        htmlPeliculas += " <th  class=\"sort\" data-sort=\"name\">Eliminar</th> ";   
        htmlPeliculas += " </tr> "
                        + "  <tbody class=\"list\"> ";   
           
        
        Integer idiomas = 0;
        Integer personas = 0;
        for( Peliculas p:misPelis ){

            idiomas = 0;
            idiomas = miSessionIdiomaPeliculas.contarIdiomasVideo( p.getIdpeliculas() );
            
            personas = 0;
            personas = miSessionPersonas.contarPersonasVideo( p.getIdpeliculas() );
            
            htmlPeliculas += " <tr> ";   
            htmlPeliculas += " <td class=\"codigo bg\" >"+ p.getIdentificador() +"</td> ";   
            htmlPeliculas += " <td class=\"titulo bg\" >"+ p.getTitulo() +"</td> ";   
            htmlPeliculas += " <td class=\"categoria bg\" >"+ p.getIdcategorias().getNombre()+"</td> ";   
            // Total idiomas relacionados a video
            htmlPeliculas += " <td class=\"idiomas bg\" style='cursor:pointer;' onclick = 'adminPelicula("+p.getIdpeliculas()+");'><center><a style='color:#000000;' href='javascript:;' data-tool=\"Administrar Idiomas\" class=\"tooltip animate\" >"+idiomas+"</a></center></center></td> ";   
            // Total personas relacionados a video
            htmlPeliculas += " <td class=\"personas bg\" style='cursor:pointer;' onclick = 'adminPersonas("+p.getIdpeliculas()+");'><center><a style='color:#000000;' href='javascript:;' data-tool=\"Administrar Personas\" class=\"tooltip animate\" >"+personas+"</a></center></center></td> ";   
            htmlPeliculas += " <td class=\" bg\" ><center><a style='color:#000000;' href='javascript:modificarPelicula(\""+p.getIdpeliculas()+"\",\""+p.getTitulo()+"\",\""+p.getIdentificador()+"\");'>Editar</a></center></td> ";   
            htmlPeliculas += " <td class=\" bg\" ><center><a style='color:#000000;' href='javascript:eliminarPelicula(\""+p.getIdpeliculas()+"\",\""+p.getTitulo()+"\",\""+p.getIdentificador()+"\");'>Eliminar</a></center></td> ";   
            htmlPeliculas += " </tr> ";   

            
        }
        
        htmlPeliculas += " </tbody> </table> ";   
       }
       
       return htmlPeliculas;
       
   }

    private String formularioAdminPelicula( String idpelicula ) {
        
        String formulario = "";
        Integer cant = 0;
        Peliculas nombrePelicula = miSessionPeliculas.consultarPelicula(idpelicula);
        
        List<Idiomapeliculas> miidiomapeli = miSessionIdiomaPeliculas.buscarIdiomasVideo(idpelicula, null);
        
        formulario += "<br><form method=\"post\" action=\"peliculas?opcion=0\">"
                    + "<table width=\"70%\" style=\"border: orange 1px solid; background-color:#FAFAFA;\">";
        formulario += "<tr>";
        formulario += "<th style='border: orange 1px solid;'>Idiomas asociados al video "+nombrePelicula.getTitulo()+"</th>";
        formulario += "</tr>";
        
        for ( Idiomapeliculas c:miidiomapeli ){
            formulario += "<tr>";
            formulario += "<td style='border: orange 1px solid;'><span style=\"float:left;\">"+c.getIdidiomas().getIdioma()+"</span>"
                    + "<span style=\"float:right;\"><a href=\"javascript:desasociar("+c.getIdidomapeliculas()+")\" data-tool=\"Eliminar relacion\" class=\"tooltip animate\"><img src=\"images/delete.jpg\" width=\"20px\"></a></span></td>";
            formulario += "</tr>";
            cant++;
        }
        
        if( cant == 0 ){
            formulario += "<tr><td style='border: orange 1px solid;'>Este video no tiene asociado nungun idioma aun.</tr></tr>";
        }
        
        String selectIdiomas = "";
        List<Idiomas> idiomas = miSessionIdiomas.findAll();
        
        if( idiomas != null ){
            selectIdiomas += "<select name='idiomas'>";
            for( Idiomas p:idiomas ){
                selectIdiomas += "<option value=\""+p.getIdidiomas()+"\"> "+ p.getIdioma() +" </option>";
            }
            selectIdiomas += "</select>";
        }
        
        formulario += "<tr><td style='text-align:center; vertical-align:center;'> "+ selectIdiomas +" &nbsp;&nbsp;&nbsp;&nbsp;";
        formulario += "<a  data-tool=\"Adicionar idioma a "+nombrePelicula.getTitulo()+"\" class=\"tooltip animate\"><input type=\"image\" src=\"images/add.png\" width=\"20px\"></a> </td></tr>";
        
        formulario += "</table><br>"
                    + "<input type=\"hidden\" name=\"idvideo\" id=\"idvideo\" value=\""+nombrePelicula.getIdpeliculas()+"\">"
                    + "<input type=\"hidden\" name=\"adicionaridioma\" id=\"adicionaridioma\" value=\"1\">"
                + "</form>";
        
        return formulario;
    }
    
    private String formularioAdminPersonas( String idpelicula ) {
        
        String formulario = "";
        Integer cant = 0;
        Peliculas nombrePelicula = miSessionPeliculas.consultarPelicula(idpelicula);
        
        List<Personapeliculas> miperpeli = miSessionPersonapeliculas.buscarPersonasVideo(idpelicula, null);
        
        formulario += "<br><form method=\"post\" action=\"peliculas?opcion=0\">"
                    + "<table width=\"70%\" style=\"border: orange 1px solid; background-color:#FAFAFA;\">";
        formulario += "<tr>";
        formulario += "<th style='border: orange 1px solid;'>Personas asociados al video "+nombrePelicula.getTitulo()+"</th>";
        formulario += "</tr>";
        
        for ( Personapeliculas c:miperpeli ){
            formulario += "<tr>";
            formulario += "<td style='border: orange 1px solid;'><span style=\"float:left;\">"+c.getIdpersonas().getNombre() + " - " + c.getIdpersonas().getProfesion() +"</span>"
                    + "<span style=\"float:right;\"><a href=\"javascript:desasociar("+c.getIdpersonapeliculas()+")\" data-tool=\"Eliminar relacion\" class=\"tooltip animate\"><img src=\"images/delete.jpg\" width=\"20px\"></a></span></td>";
            formulario += "</tr>";
            cant++;
        }
        
        if( cant == 0 ){
            formulario += "<tr><td style='border: orange 1px solid;'>Este video no tiene asociado nunguna persona aun.</tr></tr>";
        }
        
        String selectPersonas = "";
        List<Personas> Lpersonas = miSessionPersonas.findAll();
        
        if( Lpersonas != null ){
            selectPersonas += "<select name='personas'>";
            for( Personas p:Lpersonas ){
                selectPersonas += "<option value=\""+p.getIdpersonas()+"\"> "+ p.getNombre() + " - " + p.getProfesion() +" </option>";
            }
            selectPersonas += "</select>";
        }
        
        formulario += "<tr><td style='text-align:center; vertical-align:center;'> "+ selectPersonas +" &nbsp;&nbsp;&nbsp;&nbsp;";
        formulario += "<a  data-tool=\"Adicionar idioma a "+nombrePelicula.getTitulo()+"\" class=\"tooltip animate\"><input type=\"image\" src=\"images/add.png\" width=\"20px\"></a> </td></tr>";
        
        formulario += "</table><br>"
                    + "<input type=\"hidden\" name=\"idvideo\" id=\"idvideo\" value=\""+nombrePelicula.getIdpeliculas()+"\">"
                    + "<input type=\"hidden\" name=\"adicionarpersona\" id=\"adicionarpersona\" value=\"1\">"
                + "</form>";
        
        return formulario;
    }
    
    
    private Boolean eliminarPelicula (String idPeli) {

        Peliculas mipeli = miSessionPeliculas.consultarPelicula(idPeli);
    
        miSessionPeliculas.remove(mipeli);
        
        return true;
        
}

    private String retornarSelectCategorias(String tipoVideo, String defecto) {
        
        String selected="";
        
        selectCategorias = "";
        List<Categorias> misCategorias = miSessionCategorias.findAll();
        selectCategorias += "<select name='categoria' id='categoria'>";
        for( Categorias c:misCategorias ){
            
            if( defecto != null && !defecto.isEmpty() && defecto.equals( c.getIdcategorias().toString() ) ){ selected = " selected "; } else { selected = ""; }
            
            if( tipoVideo.equals("1") && c.getIdcategorias() < 1000 ){
                selectCategorias += "<option value='"+c.getIdcategorias()+"' "+selected+">"+c.getNombre()+"</option>"; 
            }
            if( tipoVideo.equals("2") && c.getIdcategorias() >= 1000 ){
                selectCategorias += "<option value='"+c.getIdcategorias()+"' "+selected+">"+c.getNombre()+"</option>"; 
            }
        }
        selectCategorias += "</select>";
        
        return selectCategorias;
    }
    
    
    
    
}
